Um den Unterschied zwischen dem Javamail-API und Apache Commons E-Mail zu begreifen, muss man wissen, dass die Commons E-Mail-Bibliothek ein Wrapper um das Javamail-API ist. Man braucht also, unabhängig davon, welches API man wählt, die Javamail-Bibliotheken. Man benötigt außerdem das Javabeans Activation Framework (JAF), das die komplexeren Content-Funktionen von Mail handhabt. Zuletzt steht Commons E-Mail auf der Liste der Bibliotheken. Man muss mail.jar aus der Javamail-Bibliothek, activation.jar aus JAF und commons-email-1.0.jar aus Commons E-Mail in den Klassenpfad eintragen.
Damit hat man die Werkzeuge zusammen und kann anfangen, eine einfache E-Mail mit Javamail zu verschicken. Im Beispielcode wurden sämtliche Einstellungen in eine einzige statische Klasse, MailSettings, zusammengezogen, damit man den Code leichter vergleichen kann.
Man braucht noch etwas, bevor man mit dem Versenden von E-Mails beginnen kann, und zwar den Host-Namen des SMTP-Servers. Der SMTP-Server ist der Rechner, der die Mails in die weite Welt verschickt.
Javamail arbeitet mit dem Konzept einer Session-Klasse, um Einstellungen wie den SMTP-Host und die Authentifizierung zu halten. Die zugrunde liegende Idee ist, dass Sessions innerhalb der Java Virtual Machine isoliert werden können und dass dadurch bösartiger Code daran gehindert wird, die Session eines anderen zu übernehmen und seine Authentifizierung auszulesen, die Benutzernamen und Passwörter enthalten kann. „Aber“, könnte man sagen, „ich lasse zur selben Zeit immer nur eine Applikation in meiner JVM laufen und traue meinem ganzen Code.“ Javamail wurde mit der Vorstellung von großen E-Mail-Systemen entwickelt und verfügt über ein entsprechendes Niveau an Komplexität, um das zu managen, was man für einfachere Anwendungen schließlich umgehen wird. So bekommt man eine Session:
Properties props=new Properties(); props.put("mail.smtp.host",MailSettings.smtpHost); Session session=Session.getDefaultInstance(props,null);
Man erzeugt nicht neue Sessions, man bekommt sie von der Session Factory und man übergibt ihr anhand einer Properties-Instanz Parameter. Hier wird nur der SMTP-Host eingestellt und übergeben. Bekommt man die Standard-Instanz, wird eine einzige freigegebene Session erzeugt. Jetzt kann man eine Mail-Nachricht erzeugen, die diese Session verwendet.
Message message=new MimeMessage(session);
Javamail hat eine Message-Klasse, für die alle Arten von Nachrichten Unterklassen sind. Wenn man sich das Javamail-API anschaut, sieht man, dass es dort nur eine Unterklasse gibt: MimeMessage. Javamail wurde als genuines E-Mail-System entwickelt, daher die scheinbar redundante Abstraktion. Wie auch immer, es wurde eine MimeMessage mit dieser Session erzeugt, und die muss jetzt bevölkert werden.
message.setFrom(new InternetAddress(MailSettings.fromAddress, MailSettings.fromName));
Neueste Kommentare
Noch keine Kommentare zu E-Mails in Java verschicken: Es gibt mehr als eine Möglichkeit
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.